﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

struct PersonEncapsulate
{
	char mName[64];
	int mAge;

	void personEat()
	{
		cout << "1." << mName << "吃人饭！" << endl;
	}
};
struct Dog
{
	char mName[64];
	int mAge;

	void dogEat()
	{
		cout << "2." << mName << "吃狗粮！" << endl;
	}
};
//3.C++中的封装，严格类型转换检测，让属性和行为绑定在一起；属性和行为作为一个整体，来表现生活中的事务；
//4.控制权限，public公有权限，protected保护权限，private私有权限；
//5.struct和class是一个意思，唯一的不同是默认权限；struct是public，但是class默认权限是private；
class Animal
{
	//private:
		//6.如果不声明权限，默认的权限是private；
	void eat() { mAge = 100; };

	int mAge;

	//8.公共权限，在类内部和类外部都可以访问；
public:
	int mHeight;

	//10.保护权限；类的内部可以访问，（当前类的子类可以访问），类外部不可以访问；
protected:
	int mWeight;
	void setWeight() { mWeight = 300; }
};
void testEncapsulate()
{
	PersonEncapsulate p;
	strcpy(p.mName, "老王");
	p.personEat();//1.老王吃人饭！
	//p.dogEat();

	//7.所谓私有权限，就是私有成员（属性和函数），在类内部可以访问，类外部不可以访问；
	Animal an;
	//an.eat();
	//an.mAge;

	//9.公有权限在类外部可以访问到；
	an.mHeight = 200;

	//11.保护权限，在类外部不可以访问到；
	//an.mWeight = 400;

//public		类内，类外，都可以访问；
//protected		类内可以访问，类外不可以访问，（子类可以访问）；
//private		类内可以访问，类外不可以访问，（子类不可以访问）；

}

//main253：c++下的封装
int main253()
{
	testEncapsulate();

	system("pause");
	return EXIT_SUCCESS;
}